package main

import (
	"fmt"
	"go_code/20220714gotest/daily-test/202209/26/customerManage/model"
	"go_code/20220714gotest/daily-test/202209/26/customerManage/service"
)

type customerView struct {
	//定义必要字段
	//接口用户输入
	key string
	//表示是否循环显示菜单
	loop            bool
	customerService *service.CustomerService
}

// 显示所有的客户信息即客户列表
func (this *customerView) list() {
	customers := this.customerService.List()
	fmt.Println("----------客户列表----------")
	fmt.Println("编号\t姓名\t性别\t年龄\t电话\t邮箱")
	for i := 0; i < len(customers); i++ {
		fmt.Println(customers[i].GetInfo())
	}
	fmt.Printf("----------客户列表加载完成----------\n\n")
}

// 编写一个add方法 去调用customerService的add方法完成客户的添加
func (this *customerView) add() {
	fmt.Println("----------添加客户----------")
	fmt.Println("请输入姓名")
	name := ""
	fmt.Scanln(&name)
	fmt.Println("请输入性别")
	gender := ""
	fmt.Scanln(&gender)
	fmt.Println("请输入年龄")
	age := 0
	fmt.Scanln(&age)
	fmt.Println("请输入电话")
	phone := ""
	fmt.Scanln(&phone)
	fmt.Println("请输入邮箱")
	email := ""
	fmt.Scanln(&email)
	newCus := model.NewCustomer2(name, gender, age, phone, email)
	//用service.会重新创建新的CustomerSerivce 导致4选项列表查不到
	// NewCustomerSerivce := service.NewCustomerSerivce()
	if this.customerService.Add(newCus) {
		fmt.Printf("----------客户添加成功----------\n\n")
		//两个变量的地址值是不同的，相差8位
		// fmt.Printf("新创的地址=%v\tthis的地址值=%v", &NewCustomerSerivce, &this)
	} else {
		fmt.Printf("----------客户添加失败----------\n\n")
	}

}

// 得到用户的输入，删除该id对应的用户
func (this *customerView) deleteById() {
	id := -1
	fmt.Println("请输入您要删除的用户编号(-1)退出")
	fmt.Scanln(&id)
	//id==-1 放弃删除
	choice := ""
	for {
		if id == -1 {
			return
		}
		//确认是否删除(Y/N)
		fmt.Println("是否确认删除(Y/N)")
		fmt.Scanln(&choice)
		if choice != "y" && choice != "Y" && choice != "n" && choice != "N" {
			fmt.Println("输入有误请重新输入(Y/N)")
			continue
		}
		if choice == "N" || choice == "n" {
			return
		}
		//调用service的delete方法
		bool := this.customerService.DeleteById(id)
		if bool {
			fmt.Println("删除成功，正在返回主界面...")
		} else {
			fmt.Println("删除失败，id不存在")
		}
		return
	}
}

// 得到用户的输入，删除该id对应的用户
func (this *customerView) updateById() {
	this.customerService.UpdateById()
}

func (this *customerView) exit() {
	fmt.Println("是否确认退出(Y/N)")
	for {
		fmt.Scanln(&this.key)
		if this.key != "y" && this.key != "Y" && this.key != "n" && this.key != "N" {
			fmt.Println("输入有误请重新输入(Y/N)")
			continue
		}
		if this.key == "N" || this.key == "n" {
			return
		}
		this.loop = false
		return
	}
}

// 显示主菜单
func (this *customerView) mainMenu() {
	for {
		fmt.Println("----------客户信息管理软件----------")
		fmt.Println("          1.添 加 客 户")
		fmt.Println("          2.修 改 客 户")
		fmt.Println("          3.删 除 客 户")
		fmt.Println("          4.客 户 列 表")
		fmt.Println("          5.退       出")
		fmt.Println("请选择(1-5)")
		fmt.Scanln(&this.key)
		switch this.key {
		case "1":
			this.add()
		case "2":
			this.updateById()
		case "3":
			this.deleteById()
		case "4":
			this.list()
		case "5":
			this.exit()
		default:
			fmt.Println("您的输入有误,请重新输入")
		}
		if !this.loop {
			break
		}
	}
	fmt.Println("您已退出客户关系管理系统...")
}

func main() {
	//在主函数中创建一个CustomerView，并创建主菜单
	customerView := customerView{
		key:  "",
		loop: true,
	}
	//初始化了customerView结构体中的customerService字段
	customerView.customerService = service.NewCustomerSerivce()
	customerView.mainMenu()

}
